Many printers incorporate an imaging scheme in which the image to be reproduced is represented as an array of individual image points called "pels" (short for "picture elements"). A typical laser printer can print an 8 inch by 10 inch image at a resolution of about 300 pels per inch. Thus, on such a printer an 8 inch by 10 inch image would consist of a set of 7,200,000 pels. In the simplest case where pels are restricted to two values--Black and White--an 8 inch by 10 inch image could be represented by 900,000 eight-bit byte values. Thus, an equivalency exists between an image to be reproduced and a set of digital values. The set of digital values which represent an image, and the image produced from a set of digital values, are referred to interchangeably herein as a bit-mapped image. Color images are more complex than black and white images and require a larger number of bytes to define a set of digital values which correspond to a bit-mapped color image. For simplicity, only black-and-white bit-mapped images will be discussed herein. However, the preferred embodiment discussed herein can be easily modified for use with color bit-mapped images.
To print a bit-mapped image stored in a computer memory, that image must first be transferred from the computer to the printer along a printer interface. Personal computers typically use a printer interface that is either a serial or a parallel connection. Serial connections typically can transfer about 1920 bytes/second while parallel connections are usually 5 to 10 times faster. Ignoring any overhead in the printer's command language, a full-page bit-mapped image transferred along a serial connection might require about 470 seconds; a parallel connection might require about 95 seconds. Since many printers can print a full page within 10 seconds after they receive the bit-mapped image, the image data transfer represents a significant bottleneck.
Printers used with personal computers are usually raster printers which print according to a predetermined scan pattern. While these patterns vary from printer to printer, it will be assumed herein that scanning is left-to-right along a horizontal row, and then left to right one vertical row down, and so on. The current print position is referred to herein as the print cursor position, or simply as the cursor.
To print an image on a raster printer three pieces of information may be required: (1) the pel image data for each pel location; (2) the page coordinates for each pel; and (3) the direction in which the cursor is to move to the next pel. The pel image data is always required since it informs the printer what is to be printed at each pel. However, the page coordinates for each pel and the cursor movement direction often does not need to be specifically transmitted. The cursor movement direction is usually established by the printer manufacturer and the current page coordinate is usually kept internally by the printer during printing. Thus when printing, the printer prints a pel, moves one pel over, updates the cursor position, and associates the current cursor position with pel image data at that location. When the cursor sweeps as far to the right as permitted, or when a new row is command by the computer, the cursor position resets to the far left, one vertical row down. Thus, usually only the initial page coordinate must be sent to the printer to synchronize printing with the pel image data.
Fortunately, many raster printers have features that provide alternatives to the simple byte stream method of transmitting information. For example, printers have a default pel value--the color of the unprinted page--which need not be transmitted. For large printing gaps the image data byte stream may simply include cursor movement commands which cause the cursor position to skip over the printing gaps.
Another feature which can significantly reduce the amount of data required to print a page is the use of character fonts. A character font is a predetermined character that the printer automatically prints when it receives a predetermined set of digital values, called font character codes. A font is a set of font characters; typical examples include the well-known Pica and Elite fonts. By controlling the computer and printer such that they agree on the character represented by a font character code, and by storing information as a set of pattern codes, a page of information may rapidly be printed. Fonts are particularly useful for text since a relatively small number of characters can transfer a significant amount of information. However, fonts have not been useful with bit-mapped images since bit-mapped images are stored as an array of individual digital values and not font character codes.
Therefore, it is dear that a need has existed for a system and method for transferring bit-mapped images to a receiving device at high speed.